#include "Contexto.h"
#include <cstdlib>

namespace Toolkit
{

Contexto::Contexto()
{
	vectorApariciones = NULL;
	sumaTotal = CANTIDAD_SIMBOLOS;
}

Contexto::~Contexto()
{
	if (vectorApariciones != NULL)
	{
		delete [] vectorApariciones;
	}
}

void Contexto::intentarInicializar()
{
	if (vectorApariciones == NULL)
	{
		vectorApariciones = new unsigned int[CANTIDAD_SIMBOLOS];

		for (int i = 0; i < CANTIDAD_SIMBOLOS; ++i)
		{
			vectorApariciones[i] = i+1;
		}
	}
}

void Contexto::aumentarFrecuencia(const unsigned char simbolo)
{
	intentarInicializar();
	sumaTotal++;

	for (unsigned int i = simbolo ; i < CANTIDAD_SIMBOLOS; ++i)
	{
		++vectorApariciones[i];
	}
}

void Contexto::calcularProbabilidad(const unsigned char simbolo,
									double &probabilidadSimboloAnterior,
									double &probabilidadSimbolo)
{
	intentarInicializar();

	probabilidadSimboloAnterior = 0;
	if (simbolo != 0)
		probabilidadSimboloAnterior = (double) vectorApariciones[simbolo - 1] / sumaTotal;

	probabilidadSimbolo = (double) vectorApariciones[simbolo] / sumaTotal;
}

}
